/**
 * @Title: UserService
 * @Package cn.com.yiqi.wsc.service.user
 * @Description: TODO
 * Copyright: Copyright (c) 2016
 * Company: 成都壹柒互动科技有限公司
 * @author 会员系统组-胥钰淋
 * @date 2017/2/9 18:08
 * @version V1.0
 */
package cn.com.yiqi.wsc.service.user;

import cn.com.yiqi.wsc.common.Result;
import cn.com.yiqi.wsc.dao.user.criteria.UserCriteria;
import cn.com.yiqi.wsc.entity.user.User;
import cn.com.yiqi.wsc.entity.user.UserEntity;
import cn.com.yiqi.wsc.service.user.dataobject.QueryUserDO;
import cn.com.yiqi.wsc.service.user.dataobject.UserDO;
import cn.com.yiqi.wsc.service.user.dataobject.UserForModifyPassword;

import java.util.List;
import java.util.Set;

/**
 * @author 会员系统组-胥钰淋
 * @ClassName: UserService
 * @Description: TODO
 * @date 2017/2/9 18:08
 */
public interface UserService {

    /**
     * 新增用户
     *
     * @param userDO
     * @return
     */
    Result insertUser(UserDO userDO);

    /**
     * 更新用户
     *
     * @param userDO
     * @return
     */
    Result updateUser(UserDO userDO);

    /**
     * 获取详情
     *
     * @param userDO
     * @return
     */
    Result detail(UserDO userDO);

    /**
     * 删除
     *
     * @param user
     * @return
     */
    Result delete(User user);

    /**
     * 启用
     *
     * @param
     * @return
     */
    Result enable(User user);

    /**
     * 禁用
     *
     * @param
     * @return
     */
    Result disable(User user);

    List<UserEntity> queryUserList(QueryUserDO queryUserDO);

    Set<String> findRoles(String username);

    Set<String> findPermissions(String username);

    /**
     * 根据用户名查询用户
     *
     * @param username
     * @return
     */
    User findByUsername(String username);

    /**
     * 根据用户名查询用户名密码
     *
     * @param username
     * @return
     */
    UserEntity findUsernameAndPasswordByUsername(String username);


    /**
     * 分页查询
     *
     * @param criteria
     * @return
     */
    Result pageList(UserCriteria criteria);


    /**
     * 获取当前用户的UserID
     *
     * @return
     */
    Integer getCurrentUserId();

    /**
     * 获取当前用户
     *
     * @return
     */
    User getCurrentUser();

    /**
     * 修改用户密码
     *
     * @return
     */
    Integer modifyPassword(UserForModifyPassword user);

    /**
     * 获得我的信息
     *
     * @param userDO
     * @return
     */
    Result getUserDetail(UserDO userDO);

    /**
     * 用户名是否窜仔
     *
     * @param username
     * @return
     */
    boolean isExist(String username);

    /**
     * 重置密码
     *
     * @param user
     * @return
     */
    Result resttingPassword(UserForModifyPassword user);


    String getTelById(Integer id);
}
